/**
 * Version1 :D
 * Input: list string co length la so le
 * Output: 
 *  1.in ra do dai cua string ma co xau dao nguoc trong list da cho
 *  2. ky tu o giua cua string do.
 *  DE:
 *  Danny có một danh sách các từ có thể là password của tài khoản facebook của Manny. 
 *  Tất cả các password đều có độ dài lẻ. Nhưng Danny biết rằng Manny rất thích sự đối xứng. 
 *  Do đó password và chuỗi kí tự đảo ngược của password sẽ cùng có mặt trong danh sách.
 *  Bạn cần in ra độ dài của password của Manny và kí tự đứng giữa password.
 *  
 *  TrinhNX 12/18:
 *  Phan tich.
 * 	 Se rong hon kia nhieu
 * 	1. Cho do dai le (khong phai luc nao cung le, nen ta ko nen bat no phai le, cu de binh thuong).
 * 	2.   rất thích sự đối xứng,  sẽ cùng có mặt trong danh sách. -> Goi y viet ham doi xung.
 *	Yeu cau
 *		in ra độ dài của password của Manny và kí tự đứng giữa password
 *	=> Tuc la, thang Danny co 1 list pwd, gio phai tim ra cai nao la cua Many(dua tren cai 1+2)
 *	=> Sau khi in dc roi thi tim cai chu dung giua.
 *	Nhan xet.
 *	- Dau tien, code can them comment, muc dich lam gi. step nhu the nao (chung chung thoi)
 *	- Co gi dac biet ve doan code nao, thi ghi ra.
 */

import java.util.ArrayList;

public class Password {
	private int length;
	private char charAtCenter;

	/**
	 * Ham dung de dao nguoc 1 xau string
	 * @param s : string dau vao
	 * @return xau dao nguoc
	 * TrinhNX 12/18: nhan xet - doc comment
	 */
	public String reverseString(String s) {

		char c[] = s.toCharArray(); // Check null s = null, NPE
		char temp; 
		// 1. O day c.length cu moi lan lap lai dc goi 1 lan.
		//		tot hon la khai bao 1 cai bien final int length = c.length;
		// 2. o day, phu thuoc vao tinh le cua string
		// 		Neu nhu c.length la chan thi ham nay sai, dung ko :3
		//  	TODO:	i. Viet lai sao cho no ko phu thuoc length 
		// 				ii. thu cai dat lai bang de quy coi ;) - optional
		for (int i = 0; i < (c.length) / 2; i++) {
			temp = c[i];
			c[i] = c[c.length - i - 1];
			c[c.length - i - 1] = temp;
		}
	
		String kq = new String(c);
		//		System.out.println(""+kq);
		return kq;
	}

	/**
	 * Kiem tra xem 1 list string parent co chua  cai string sub nao ko
	 * @param parent
	 * @param sub
	 * TrinhNX 12/18: 
	 * 	Vai diem trong code.
	 * 	Co tien bo trong tu tuong, biet tach biet cac module , nhung van con qua' so sai.
	 * 		1. Check null
	 * 		2. Dung bien (length / charAtCenter
	 * 		3. Flow cua vong for kia
	 * 		- Neu nhu no chua thi van check tiep ha?
	 * 			Nhung cuoi cung no lai in thang check cuoi cung (ngoai for)
	 * 			Chua ke neu ko thay, thi cac bien kia chua duoc khoi tao, null pointer exception (NPE)
	 * 		- Input/output cho cai nay
	 * 			Ham nay co nen return void (public void fundSubString)
	 * 			Co cach nao toi uu hon ko
	 */
	public void findSubString(ArrayList<String> parent, String sub) {
		// Check null again, cho parent ()
		// Check null cho sub.
		for (int i = 0; i < parent.size(); i++) {
			if (parent.contains(sub)) {
				// O day, khai bao bien global???
				length = sub.length();
				charAtCenter = sub.charAt((length - 1) / 2);
			} else {
				System.out.println("Not found!");
			}
		}
		System.out.println("Lenght PassWord: " + length);
		System.out.println("Char at center password: " + charAtCenter);
	}

	public static void main(String[] args) {
		Password test = new Password();
		ArrayList<String> input = new ArrayList<>();

		input.add("abc");
		input.add("xya");
		input.add("cba");
		input.add("nkl");

		for (int i = 0; i < input.size(); i++) {
			String temp = test.reverseString(input.get(i));
			test.findSubString(input, temp);
		}
	}

}
